package com;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 网络架构 : B/S和C/S
 * 
 * B/S : Browser/Server,基于浏览器进行交互,比如网页版淘宝
 * 
 * C/S : Client/Server,基于客户端进行交互,比如下载安装的淘宝APP
 * 
 * TCP :
 * 
 * 能重传,不丢包,有序 可靠 面向连接 请求需要来回往返,简称三次握手
 * 
 * UDP :
 * 
 * 速度快 不保证可靠 可能丢包 无连接
 * 
 * @author lenovo
 * @date 2020年7月22日
 */
public class _01_TCPServer {

	public static void main(String[] args) throws IOException {
		// 开启端口
		ServerSocket ss = new ServerSocket(10000);
		System.out.println("服务器已启动,正在等待客户连接...");

		// 执行这个方法的时候,就会停下来,一直到有客户连接位置
		// 有客户连接之后,skt 就保存客户端对象
		Socket skt = ss.accept();
		System.out.println("客户已连接");
		// 获取客户端输入的数据流
		InputStream fis = skt.getInputStream();
		BufferedReader br = new BufferedReader(new InputStreamReader(fis, "gbk"));
		// 读取客户输入的数据
		String line = br.readLine();
		System.out.println(line);

		// 获取输出流和打印流,把数据返回给客户端
		PrintWriter out = new PrintWriter(new OutputStreamWriter(skt.getOutputStream(), "gbk"));
		out.println("-----------");

		out.close();
		br.close();
		fis.close();
		skt.close();
		ss.close();
		System.out.println("连接已关闭");
	}

}
